package com.pengcheng.taskapplication.net;


import android.text.TextUtils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.pengcheng.taskapplication.TaskApplication;
import com.pengcheng.taskapplication.contants.ConstantValue;
import com.pengcheng.taskapplication.util.Logger;
import com.pengcheng.taskapplication.util.SPUtils;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.Buffer;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;

/**
 * Created by xuke on 2017/10/27.
 * <p
 */

public class RetrofitHelper {

    private static final long DEFAULT_TIMEOUT = 30;
    private static RetrofitHelper mInstance;
    private APIService mAPIService;
    private static Gson gson;


    private RetrofitHelper() {
        initRetrofit();
    }

    public static RetrofitHelper getInstance() {
        if (mInstance == null) {
            synchronized (RetrofitHelper.class) {
                if (mInstance == null) {
                    mInstance = new RetrofitHelper();
                    gson = new GsonBuilder()
                            .setDateFormat("yyyy-MM-dd HH:mm:ss")
                            .create();
                }
            }
        }
        return mInstance;
    }

    private void initRetrofit() {
        Retrofit retrofit = new Retrofit
                .Builder()
                .baseUrl(ConstantValue.BASEURL)
                //.addConverterFactory(GsonConverterFactory.create())
                .addConverterFactory(CustomGsonConverterFactory.create())
               // .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .client(getBuilder().build())
                .build();
        mAPIService = retrofit.create(APIService.class);
    }

    private OkHttpClient.Builder getBuilder() {

        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();
                        HttpUrl url = original.url();
                        String path=url.encodedPath();
                        Request.Builder requestBuilder = original.newBuilder().
                                addHeader("authorization",SPUtils.getString(TaskApplication.getInstance(),ConstantValue.SpType.token));
                        Request request = requestBuilder.build();
                        Response response=chain.proceed(request);
                        return response;
                    }
                })
                .retryOnConnectionFailure(true);
        return builder;
    }

//    /**
//     * 获取验证码
//     *
//     * @param mobile 手机号
//     */
//    public Call<SmsEntity> getCode(String mobile) {
//        return mAPIService.getCode(mobile);
//    }
//
//    /**
//     * 注册
//     *
//     * @param phone     手机号
//     * @param password  密码
//     * @param refercode 推荐码
//     */
//    public Call<RegistEntity> regist(String phone, String password,String etCodeStr, String refercode) {
//        return mAPIService.regist(phone, password, etCodeStr,refercode);
//    }
//
//
//    /**
//     * 登录
//     *
//     * @param phone    手机号
//     * @param password 密码
//     * @param sms      0
//     */
//    public Call<LoginUserEntity> login(String phone, String password) {
//        return mAPIService.login(phone, password);
//    }
//
//    /**
//     * 兑换
//     *
//     * @param u_id    用户id
//     * @param code      兑换码
//     */
//    public Call<BaseEntity> push(String u_id, String code) {
//        return mAPIService.push(u_id, code);
//    }
//
//
//    /**
//     * 修改密码
//     *
//     * @param phone    手机号
//     * @param password 新密码
//     * @param sms      0
//     */
//    public Call<RegistEntity> forgotpassword(String phone, String password, String sms) {
//        return mAPIService.forgotpassword(phone, password, sms);
//    }
//
//    /**
//     * 修改密码根据旧密码
//     *
//     * @param phone    手机号
//     * @param password 新密码
//     * @param sms      0
//     */
//    public Call<RegistEntity> updatepassword(String u_id,String old, String password, String confirm) {
//        return mAPIService.updatepassword(u_id, old,password, confirm);
//    }
//
//
//    /**
//     * 用户信息
//     *
//     * @param u_id 用户id
//     */
//    public Call<UserInfoEntity> getUserInfo(String u_id) {
//        return mAPIService.getUserInfo(u_id);
//    }
//
//
//    /**
//     * 获取首页热门任务
//     */
//    public Call<TaskListEntity> getTaskList() {
//        return mAPIService.getTaskList("0", "1", "10");
//    }
//
//    /**
//     * 获取任务详情
//     *
//     * @param u_id 用户id
//     * @param t_id 任务id
//     */
//    public Call<TaskDetailEntity> getTaskDetail(String u_id, String t_id) {
//        return mAPIService.getTaskDetail(u_id, t_id);
//    }
//
//    /**
//     * 获取版本信息
//     *
//     * @param version 版本号
//     */
//    public Call<VersionEntity> getVersionDetail(String version) {
//        return mAPIService.getVersionDetail(version);
//    }
//
//    /**
//     * 领取任务
//     *
//     * @param u_id 用户id
//     * @param t_id 任务id
//     */
//    public Call<BaseEntity> getTaskOrder(String u_id, String t_id) {
//        return mAPIService.getTaskOrder(u_id, t_id);
//    }
//
//
//    /**
//     * 兑换码
//     *
//     * @param u_id 用户id
//     * @param codestr 兑换码id
//     */
//    public Call<BaseEntity> pushCode(String u_id, String  codestr) {
//        return mAPIService.pushCode(u_id, codestr);
//    }
//
//
//
//    /**
//     * 关于我们 商务合作
//     */
//    public Call<AboutUsEntity> getAboutUs() {
//        return mAPIService.getAboutUs();
//    }
//
//    /**
//     * 常见问题
//     */
//    public Call<QuestionEntity> getQuestion() {
//        return mAPIService.getQuestion();
//    }
//
//    /**
//     * 我的任务
//     */
//    public Call<MyTaskEntity> getMyTask(String userid, String status) {
//        return mAPIService.getMyTask(userid, status);
//    }
//
//    /**
//     * 提现
//     */
//    public Call<BaseEntity> getTiXian(String u_id, String account, String name, String money) {
//        return mAPIService.getTiXian(u_id, account, name, money);
//    }
//
//    /**
//     * 收支明细
//     */
//    public Call<ShouZhiEntity> getShouZhi(String userid, String type, String page, String pagesize) {
//        return mAPIService.getShouZhi(userid, type, page, pagesize);
//    }
//
//    /**
//     * 任务收支明细
//     */
//    public Call<ShouZhiEntity> getTaskShouZhi(String userid, String type, String page, String pagesize) {
//        return mAPIService.TaskMoneyList(userid, type, page, pagesize);
//    }
//
//
//    /**
//     * 编辑个人信息
//     */
//    public Call<BaseEntity> editUserInfo(String u_id, String avatar, String nick, String gender, String birthday) {
//        if (TextUtils.isEmpty(avatar)) {
//            Logger.e("xuke", "avatar=" + avatar);
//            return mAPIService.editUserInfo1(u_id, nick, gender, birthday);
//        } else {
//            Logger.e("xuke", "avatar=" + avatar);
//            return mAPIService.editUserInfo2(u_id, avatar, nick, gender, birthday);
//        }
//    }
//
//    /**
//     * 提交任务
//     * <p>
//     * 提交审核submitorder
//     * 字段名：o_id（任务订单ID）  info（提交任务说明）  picstr（提交图片字符串，格式:pic1&pic2&pic3&pic4&pic5&）
//     * 返回：code：100提交成功  400系统错误
//     */
//    public Call<BaseEntity> submitOrder(String u_id, String o_id, String info, String picstr,String sign) {
//        return mAPIService.submitOrder(u_id, o_id, info, picstr,sign);
//    }
//
//    public Call<BaseEntity> submitOrderNew(String u_id, String o_id, String info, String picstr) {
//        return mAPIService.submitOrderNew(u_id, o_id, info, picstr);
//    }
//
//    /**
//     * 取消任务
//     */
//    public Call<BaseEntity> cancleOrder(String u_id, String o_id) {
//        return mAPIService.cancelOrder(u_id, o_id);
//    }
//
//
//    /**
//     * 已提交任务详情
//     */
//    public Call<SubmitOrderDetailEntity> submitOrderDetail(String o_id) {
//        return mAPIService.submitOrderDetail(o_id);
//    }
//
//    /**
//     * 用户投诉发布者
//     */
//    public Call<BaseEntity> setAppeal(String u_id,String o_id,String text) {
//        return mAPIService.setAppeal(u_id,o_id,text);
//    }
//
//
//    /**
//     * 用户余额
//     */
//    public Call<MoneyEntity> moneyView(String u_id) {
//        return mAPIService.moneyView(u_id);
//    }
//
//    /**
//     * 今日邀请收益
//     */
//    public Call<TuiJianEntity> getincome(String u_id) {
//        return mAPIService.getincome(u_id);
//    }
//
//    /**
//     * 获取图片
//     */
//    public Call<ImageEntity> getQrCode(String u_id) {
//        return mAPIService.getQrCode(u_id);
//    }

}
